package com.org.cys.util;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

/**
 * 通用的POJO
 * @author caiyushen
 * */
public class PageData extends HashMap implements Map{
	
	/*serialVersionUID用来作为Java对象序列化中的版本标示之用； 
	如果一个序列化类没有声明这样一个static final的产量，JVM会根据各种参数为这个类计算一个； 
	对于同样一个类，不同版本的JDK可能会得出不同的serivalVersionUID;*/ 
	private static final long serialVersionUID = 1L;
	
	Map map = null;
	HttpServletRequest request;
	
	/**
	 * 构造函数
	 * 获取request请求里面的参数并封装到PageData里面
	 * */
	public PageData(HttpServletRequest request){
//		System.out.println("进入构造函数Request");
		//检查request.getParamter("keyWord")是否为乱码，如果是乱码，要去tomcat的配置文件Server设置编码utf-8
		this.request = request;
		/*request.getParameterMap()的返回类型是Map类型的对象，也就是符合key-value的对应关系，但这里要注 
		意的是，value的类型是String[],而不是String. */
		Map properties = request.getParameterMap();
		Map returnMap = new HashMap(); 
		//获得map的迭代器，用作遍历map中的每一个键值对
		Iterator entries = properties.entrySet().iterator(); 
		Map.Entry entry; 
		String name = "";  
		String value = "";  
		while (entries.hasNext()) {
			entry = (Map.Entry) entries.next(); 
			name = (String) entry.getKey(); 
			Object valueObj = entry.getValue(); 
			if(null == valueObj){ 
				value = ""; 
			}else if(valueObj instanceof String[]){ 
				String[] values = (String[])valueObj;
				for(int i=0;i<values.length;i++){ 
					 value = values[i] + ",";
				}
				value = value.substring(0, value.length()-1); 
			}else{
				value = valueObj.toString(); 
			}
			returnMap.put(name, value); 
		}
		map = returnMap;
	}
	
	/**
	 * 构造函数
	 * */
	public PageData() {
//		System.out.println("进入初始化构造函数");
		map = new HashMap();
	}
	
	
	
	@Override
	public Object get(Object key) {
//		System.out.println("进入get()");
		Object obj = null;
		//instanceof判断类型 返回true和false
		if(map.get(key) instanceof Object[]) {
			Object[] arr = (Object[])map.get(key);
			//页面请求的key不为空并且请求不为空，得到数组的第一个数，如果不成立及返回map里面KEY对应的value
			obj = request == null ? arr:(request.getParameter((String)key) == null ? arr:arr[0]);
		} else {
			obj = map.get(key);
		}
		return obj;
	}
	
	public String getString(Object key) {
//		System.out.println("进入getString()");
		return (String)get(key);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public Object put(Object key, Object value) {
//		System.out.println("进入put()");
		if(!StringUtil.checkObj(value)){
			value = null;
		}
		return map.put(key, value);
	}
	
	@Override
	public Object remove(Object key) {
//		System.out.println("进入remove()");
		return map.remove(key);
	}

	public void clear() {
//		System.out.println("进入clear()");
		map.clear();
	}

	public boolean containsKey(Object key) {
		// TODO Auto-generated method stub
//		System.out.println("进入containsKey()");
		return map.containsKey(key);
	}

	public boolean containsValue(Object value) {
		// TODO Auto-generated method stub
//		System.out.println("进入containsValue()");
		return map.containsValue(value);
	}

	public Set entrySet() {
		// TODO Auto-generated method stub
//		System.out.println("进入entrySet()");
		return map.entrySet();
	}

	public boolean isEmpty() {
		// TODO Auto-generated method stub
//		System.out.println("进入isEmpty()");
		return map.isEmpty();
	}

	public Set keySet() {
		// TODO Auto-generated method stub
//		System.out.println("进入keySet()");
		return map.keySet();
	}

	@SuppressWarnings("unchecked")
	public void putAll(Map t) {
		// TODO Auto-generated method stub
//		System.out.println("进入putAll()");
		map.putAll(t);
	}

	public int size() {
		// TODO Auto-generated method stub
//		System.out.println("进入size()");
		return map.size();
	}

	public Collection values() {
		// TODO Auto-generated method stub
//		System.out.println("进入values()");
		return map.values();
	}
	
	public String toString(){
//		System.out.println("进入toString()");
		return map.toString();
	}
	
}
